﻿/**
 * 通用js方法封装处理
 * Copyright (c) 2019 ljxl
 */
import { getBaseUrl } from '@/utils/env'
import { listUser } from "@/api/system/user";
const baseURL = getBaseUrl()

// 日期格式化
export function parseTime(time, pattern) {
   if (arguments.length === 0 || !time) {
	   return null
   }
   const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
   let date
   if (typeof time === 'object') {
	   date = time
   } else {
	   if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
		   time = parseInt(time)
	   } else if (typeof time === 'string') {
		   time = time.replace(new RegExp(/-/gm), '/');
	   }
	   if ((typeof time === 'number') && (time.toString().length === 10)) {
		   time = time * 1000
	   }
	   date = new Date(time)
   }
   const formatObj = {
	   y: date.getFullYear(),
	   m: date.getMonth() + 1,
	   d: date.getDate(),
	   h: date.getHours(),
	   i: date.getMinutes(),
	   s: date.getSeconds(),
	   a: date.getDay()
   }
   const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
	   let value = formatObj[key]
	   // Note: getDay() returns 0 on Sunday
	   if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
	   if (result.length > 0 && value < 10) {
		   value = '0' + value
	   }
	   return value || 0
   })
   return time_str
}

// 表单重置
export function resetForm(refName) {
   if (this.$refs[refName]) {
	   this.$refs[refName].resetFields();
   }
}

// 添加日期范围
export function addDateRange(params, dateRange, propName) {
   var search = params;
   search.params = {};
   if (null != dateRange && '' != dateRange) {
	   if (typeof(propName) === "undefined") {
		   search.params["beginTime"] = dateRange[0];
		   search.params["endTime"] = dateRange[1];
	   } else {
		   search.params["begin" + propName] = dateRange[0];
		   search.params["end" + propName] = dateRange[1];
	   }
   }
   return search;
}

// 回显数据字典
export function selectDictLabel(datas, value) {
   var actions = [];
   Object.keys(datas).some((key) => {
	   if (datas[key].dictValue == ('' + value)) {
		   actions.push(datas[key].dictLabel);
		   return true;
	   }
   })
   return actions.join('');
}

// 回显数据字典（字符串数组）
export function selectDictLabels(datas, value, separator) {
   var actions = [];
   var currentSeparator = undefined === separator ? "," : separator;
   var temp = value.split(currentSeparator);
   Object.keys(value.split(currentSeparator)).some((val) => {
	   Object.keys(datas).some((key) => {
		   if (datas[key].dictValue == ('' + temp[val])) {
			   actions.push(datas[key].dictLabel + currentSeparator);
		   }
	   })
   })
   return actions.join('').substring(0, actions.join('').length - 1);
}

// 通用下载方法
export function download(fileName) {
   window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
}

// 字符串格式化(%s )
export function sprintf(str) {
   var args = arguments, flag = true, i = 1;
   str = str.replace(/%s/g, function () {
	   var arg = args[i++];
	   if (typeof arg === 'undefined') {
		   flag = false;
		   return '';
	   }
	   return arg;
   });
   return flag ? str : '';
}

// 转换字符串，undefined,null等转化为""
export function praseStrEmpty(str) {
   if (!str || str == "undefined" || str == "null") {
	   return "";
   }
   return str;
}

/**
* 构造树型结构数据
* @param {*} data 数据源
* @param {*} id id字段 默认 'id'
* @param {*} parentId 父节点字段 默认 'parentId'
* @param {*} children 孩子节点字段 默认 'children'
* @param {*} rootId 根Id 默认 0
*/
export function handleTree(data, id, parentId, children, rootId) {
   id = id || 'id'
   parentId = parentId || 'parentId'
   children = children || 'children'
   rootId = rootId || Math.min.apply(Math, data.map(item => { return item[parentId] })) || 0
   //对源数据深度克隆
   const cloneData = JSON.parse(JSON.stringify(data))
   //循环所有项
   const treeData = cloneData.filter(father => {
	   let branchArr = cloneData.filter(child => {
		   //返回每一项的子级数组
		   return father[id] === child[parentId]
	   });
	   branchArr.length > 0 ? father.children = branchArr : father.children=undefined;
	   //返回第一层
	   return father[parentId] === rootId;
   });
   return treeData != '' ? treeData : data;
}

export function getSysUserList(){
   return listUser();
}
